import { Message } from 'element-ui';

/**
 * @description elemenUI 表单校验规则
 */


/**
 * @description  input 字符长度校验
 * @param {number} maxLength 字符长度最大限制
 */
export const limitLength = (maxLength) => {
  // 此处函数形式 和 elementUI 自定义校验规则对应
  return (rule, value, callback) => {
    if (!(value ??= '')) {
      return callback()
    }
    let strV = String(value)
    if (strV.length > maxLength) {
      return callback(new Error('超出字符限制,限制长度：' + maxLength));
    }
    return callback()
  }
}

/**
 * @description  input 字符长度校验
 * @param {number} maxLength 字符长度最大限制
 * @param {string} msg 提示信息
 * @param {string} idDom 错误dom id
 */
export const limitLengthFocus = (maxLength, msg, idDom, isTips = false) => {
  // 此处函数形式 和 elementUI 自定义校验规则对应
  return (rule, value, callback) => {
    if (!(value ??= '')) {
      return callback()
    } else {
      let strV = String(value)
      if (strV.length > maxLength) {
        if (isTips) {
          Message({
            showClose: true,
            type: "error",
            message: '表单验证未通过，请检查所填项目是否出现错误',
            duration: 3000,
          });
        }
        // 聚焦到错误dom上
        idDom && document.getElementById(idDom).querySelector("input").focus();
        return callback(new Error(msg));
      } else {
        return callback()
      }
    }
  }
}

/**
 * @description  input 必填校验
 * @param {string} msg 提示信息
 * @param {string} idDom 错误dom id
 */
export const requiredInput = (msg, idDom, isTips = false) => {
  // 此处函数形式 和 elementUI 自定义校验规则对应
  return (rule, value, callback) => {
    if ((!!value && !Array.isArray(value)) || !!value?.length) {
      return callback()
    } else {
      if (isTips) {
        Message({
          showClose: true,
          type: "error",
          message: '表单验证未通过，请检查所填项目是否出现错误',
          duration: 3000,
        });
      }
      // 聚焦到错误dom上
      idDom && document.getElementById(idDom).querySelector("input").focus();
      return callback(new Error(msg));
    }
  }
}

/**
 * @description  input 数值输入校验。参数与 elementUI 自定义校验规则对应
 */
export const checNumber = (rule, value, callback) => {
  if (!value && value !== '0.00' && value !== 0) {
    // return callback(new Error("该项不能为空"));
    return callback();
  }
  if (value < 0) {
    return callback(new Error('请输入有效数值'));
  }
  return callback();
}
